home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Presentations / Presentations ’97 / Sessions ’97 / Multiplatform Code⁄Data Sharing / HelloBothWorlds / GE / LibHdr / getimer.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-24  |  2.4 KB  |  123 lines  |  [TEXT/CWIE]

  1. /*
  2.     GETimer.h
  3.  
  4.     Graphic Elements timer functions
  5.  
  6.     Copyright 1995 by Al Evans. All rights reserved.
  7.  
  8.     11/1/95
  9.  
  10. */
  11.  
  12. #ifndef GETIMER
  13.  
  14. #define GETIMER
  15.  
  16. #ifndef PRELOAD
  17. #include "preload.h"
  18. #endif
  19.  
  20. #ifndef GEDEFS
  21. #include "Defs.h"
  22. #endif
  23.  
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27.  
  28. //Timer "rate" for 1 ms world time/ms real time
  29. #define geTimerStdRate 0x00010000
  30.  
  31.  /*
  32.     The variable-rate timer for a GEWorld
  33. */
  34.  
  35. #if defined(COMPILER_IS_MAC)
  36. // Use Time Manager for Mac
  37. #include <timer.h>
  38. #endif
  39.  
  40. #if defined(TARGET_IS_WIN95)
  41. // Use MultiMedia timer for Windows 95
  42. #include <MMSYSTEM.H>
  43. typedef struct {
  44.     MMRESULT            taskRef;
  45.     volatile Boolean    inTask;
  46. } TMTask;
  47.  
  48. // Windows only -- called before using any GE services
  49. Boolean    InitGETimer();
  50. // Windows only -- called after app is finished with GE
  51. void    ShutdownGETimer();
  52. #endif
  53.  
  54. #if defined(TARGET_IS_BEOS)
  55. typedef struct {
  56.     thread_id        thread;
  57.     volatile bool    quit;
  58.     volatile bool    finished;
  59. } TMTask;
  60.  
  61. extern sem_id    winLockerSemaphore;
  62.  
  63. // Statistics gathering for BeOS
  64. double GetLastFrameTime();
  65. ulong GetTotalFrames();
  66. double GetTotalFrameTime();
  67.  
  68. // Utility functions
  69. bool LockWorldWindow(GEWorldPtr world);
  70. void UnlockWorldWindow(GEWorldPtr world);
  71.  
  72. #endif
  73.  
  74. // Basic time slice is 4 ms
  75. #define geTimeTick 4
  76.  
  77. // Timer "rate" for 1 ms world time/ms real time
  78. #define geTimerStdRate 0x00010000
  79.  
  80. // Timer record for GEWorld
  81. typedef struct GETMgrRec {
  82.     TMTask            aTMTask;
  83.     unsigned long    currentTime;
  84.     long             currentRate;
  85.     long            timeAccum;
  86.     Boolean            running;
  87. } GETMgrRec, *GETMgrRecPtr;
  88.  
  89. // Function prototypes -- these are defined in GETimer.c for Mac and GEWTimer.c for Windows
  90.  
  91. // For completeness    
  92. GETMgrRecPtr NewGETimer(void);
  93.  
  94. // Free system services and memory
  95. void DisposeGETimer(GEWorldPtr world);
  96.  
  97. void StartGETimer(GEWorldPtr world);
  98.  
  99. void StopGETimer(GEWorldPtr world);
  100.  
  101.  
  102. //Returns current time in world
  103. unsigned long CurrentGETime(GEWorldPtr world);
  104.  
  105. /*    Set the number of timer milliseconds that pass per "real"
  106.     millisecond. newRate is treated as a fixed-point number,
  107.     with a two-byte positive integer and a two byte fraction,
  108.     such that a value of 0x00010000 will give a 1-to-1
  109.     correspondence between Graphic Elements "milliseconds"
  110.     and real milliseconds.
  111. */
  112.  
  113. void SetGETimerRate(GEWorldPtr world, unsigned long newRate);
  114.  
  115. // Returns current "rate" of timer in world
  116. unsigned long GetGETimerRate(GEWorldPtr world);
  117.  
  118. #ifdef __cplusplus
  119. }
  120. #endif
  121.  
  122. #endif // GETIMER
  123.